<?php

/**
 * WBSplitter 
 * 
 * SplitPanel 에서 화면 분할을 해주는 Panel 
 * 
 * @author easylogic
 * @package php.ui.winbinder 
 */
class WBSplitter extends WBPanel {

	private $_mouseX = 0;
	private $_mouseY = 0;
	private $_init = true;
	
	public function __construct($options = array()) {
		parent::__construct($options);
	}
	
	public function __destruct() { 
		parent::__destruct();
		
		unset($this->_mouseX);
		unset($this->_mouseY);
		unset($this->_init);
	}	
	
	public function initComponent() {
		parent::initComponent();
		
		if (!isset($this->width)) { $this->setOption('width', 10); }
		if (!isset($this->height)) { $this->setOption('height', 10); }
		
		if ($this->getOption('width') < 10 ){ $this->setOption('width', 10); }
		if ($this->getOption('height') < 10 ){ $this->setOption('height', 10); }
		
		$this->setSize($this['width'], $this['height']);
		
		// 상위 윈도우에 splitter 추가 
		if (isset($this->parent)) { 
			$parent = wbparent($this);
			if ($parent) {
				$parent->addSplitter($this);
			}
		}
	}
	
	/**
	 * 마우스 위치 설정 
	 * 
	 * Splitter 영역과 마우스 위치의 거리를 구할 때 사용한다. 
	 * 
	 * @param int $x
	 * @param int $y
	 */
	public function setMousePosition($x, $y) { 
		$this->_mouseX = $x;
		$this->_mouseY = $y;
	}
	
	/**
	 * 이동된 Mouse 위치 설정 
	 * 
	 * @param int $x
	 * @param int $y
	 */
	public function setMovePosition($x, $y) {
		$pos = $this->getPosition();
		
		if ($this->isEnabledMoveX()) { 		// x 축 이동가능 할 때  최대,최소 x 위치   
			$pos['x'] += $this->getMoveX($x);
			
			if ($pos['x'] < $this->getOption('minX')) { 
				$pos['x'] = $this->getOption('minX');
			} else if ($pos['x'] > $this->getOption('maxX')) { 
				$pos['x'] = $this->getOption('maxX'); 
			}
			
		} else if ($this->isEnabledMoveY()) { 		// y 축 이동가능 할 때 최대,최소 y 위치  
			$pos['y'] += $this->getMoveY($y);
			
			if ($pos['y'] < $this->getOption('minY')) { 
				$pos['y'] = $this->getOption('minY');
			} else if ($pos['y'] > $this->getOption('maxY')) { 
				$pos['y'] = $this->getOption('maxY'); 
			} 
		}
		
		$this->setPosition($pos['x'], $pos['y']);	// splitter 좌표 이동 
		
		$this->_init = false;				// 이동했으면 초기상태 변경 , false : 이동한 상태 
		
		$this->setMousePosition($x,$y);		// 현재의 mouse 위치 설정 
		
		$this->getOption('parent')->doLayout();  // 상위 layout rendering
	}
	
	/**
	 * 움직인 x 좌표 측정 
	 * 
	 * @param int $afterX
	 * @return int 
	 */
	public function getMoveX($afterX) { 
		return $afterX - $this->_mouseX;
	}
	
	/**
	 * 움직인 x 좌표 측정 
	 * 
	 * @param int $afterX
	 * @return int 
	 */
	public function getMoveY($afterY) { 
		return $afterY - $this->_mouseY;
	}

	/**
	 * X 축만 움직임 여부 
	 * 
	 * @return bool   true : x 축 움직임 가능 
	 */	
	public function isEnabledMoveX() { 
		$parent = $this->getOption('parent');

		if ($parent instanceof WBSplitPanel) { 
			if ($parent->getLayout() instanceof WBVBoxLayout) { 
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * Y 축만 움직임 여부 
	 * 
	 * @return bool   true : y 축 움직임 가능 
	 */
	public function isEnabledMoveY() { 
		$parent = $this->getOption('parent');

		if ($parent instanceof WBSplitPanel) { 
			if ($parent->getLayout() instanceof WBHBoxLayout) { 
				return true;
			}
		}
		
		return false;
	}	

	/**
	 * 최초 생성인지 여부 확인 
	 * 
	 * @return bool  true : 최초 생성, false : 위치가 바뀜 
	 */
	public function isInit() { 
		return $this->_init;
	}
}

?>